﻿using blacksoft.Constantes;
using blacksoft.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace blacksoft.Controllers
{
    public class INT_PrincipalController : Controller
    {
        private inf245travelbusEntities db = new inf245travelbusEntities();
        //
        // GET: /INT_Reserva/
        public ActionResult Index()
        {
            Session[SystemField.SESION_ID_USUARIO_TIPO_PERSONA] = SystemField.ID_USUARIO_PERSONA_COMUN_NO_LOGUEADA;
            var model = new GenerateReservaFilterModel();
           
            //model.ListOrigen = (from c in db.Ruta.ToList().Where(c => c.Estado == "AC") select new SelectListItem() { Text = c.Origen, Value = c.IDRuta.ToString() }).ToList();
            //model.ListDestino = (from c in db.Ruta.ToList().Where(c => c.Estado == "AC") select new SelectListItem() { Text = c.Destino, Value = c.IDRuta.ToString() }).ToList();
            var ListRutaActiva = db.Ruta.ToList().Where(c => c.Estado == "AC").ToList();
            var Origen = ListRutaActiva.Select(c => new { c.Origen }).Distinct().ToList();
            var Destino = ListRutaActiva.Select(c => new { c.Destino }).Distinct().ToList();

            model.ListOrigen = (from c in Origen select new SelectListItem() { Text = c.Origen, Value = c.Origen }).ToList();
            model.ListDestino = (from c in Destino select new SelectListItem() { Text = c.Destino, Value = c.Destino }).ToList();

            model.mensajeAgregoBien = Session["MensajeRegistroCliente"] == null ? "" : Session["MensajeRegistroCliente"].ToString();
            return View(model);
        }

        public JsonResult IngresarCliente(string user, string password) {
            var listaPersona = (from per in db.Persona.ToList()
                                join usu in db.Usuario.ToList() on per.IDPersona equals usu.IDPersona.Value
                                where per.TipoPersona == SystemField.ID_PERSONA_PASAJERO_COMUN
                                select new { per.IDPersona, usu.IDUsuario, usu.Nombre, usu.Contraseña, usu.IDPerfil, Persona = per.Nombre + " " + per.ApellidoPaterno + " " + per.ApellidoMaterno }).ToList();



            var validaUsuario = (listaPersona.Where(c => c.Nombre == user && c.Contraseña == SetHash(password))).ToList();
            if (validaUsuario.Any())
            {
                Session[SystemField.SESION_ID_PERSONA_COMUN_LOGUEADA] = validaUsuario.First().IDPersona;
                Session[SystemField.SESION_USUARIO_LOGUEADO] = true;
                Session[SystemField.SESION_ID_USUARIO_TIPO_PERSONA] = SystemField.ID_USUARIO_PERSONA_COMUN;

                //INI SESSIONES QUE SI DEBEN ESTAR
                Session[SystemField.SESION_CODIGO_PERSONA] = validaUsuario.First().IDPersona;
                Session[SystemField.SESION_CODIGO_PERFIL] = validaUsuario.First().IDPerfil;

                Session["sessionNombreCompletoPersona"] = validaUsuario.First().Persona;
                //FIN SESSIONES QUE SI DEBEN ESTAR
                return Json(new { resultado = "1" });
            }
            else {
                return Json(new { resultado = "0" });
            }
        }

        public ActionResult PaginaPrincipalCliente() {
            var model = new GenerateReservaFilterModel();
            model.mensajeAgregoBien = Session["MensajeRegistroCliente"] == null ? "" : Session["MensajeRegistroCliente"].ToString();
            return View(model);
        }

        public ActionResult PaginaPrincipal() {
            return View();
        }

        public ActionResult Logout() {
            //Session["IdPersonaLogueada`"] = null;
            /*
            Session[SystemField.SESION_ID_PERSONA_COMUN_LOGUEADA] = null;
            Session[SystemField.SESION_USUARIO_LOGUEADO] = null;
            Session[SystemField.SESION_ID_USUARIO_TIPO_PERSONA] = null;
            */
            Session.Abandon();
            return RedirectToAction("index", "INT_Principal");
        }

        private static string SetHash(string a)
        {
            using (MD5 md5Hash = MD5.Create())
            {
                return GetMd5Hash(md5Hash, a);
            }
        }


        public static string GetMd5Hash(MD5 md5Hash, string input)
        {

            // Convert the input string to a byte array and compute the hash.
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string.
            return sBuilder.ToString();
        }

	}
}